from abc import ABCMeta, abstractmethod


class OtherService(metaclass=ABCMeta):

    """"
    查寝相关操作
    ******
    ******
    """

    #  在location插入新的记录,返回bool,如果传入的参数为None，或者发生异常（如参数格式不对）返回False,以下date为date类型
    #  每天一个人每天只能报寝一次，再次报寝会返回false
    @abstractmethod
    def addNewLocation(self,dormitoryId ,userId ,date ):
        pass

    # 返回指定日期没有报寝的userId,date为字符串，要求形如 2021-5-15
    @abstractmethod
    def getAllUserIdNotInDormitory(self, date):
        pass

    #  返回指定日期成员没有全部报寝的宿舍Id,date为字符串，要求形如 2021-5-15
    @abstractmethod
    def getAllDormitoryIdNotFinish(self, date):
        pass

    #  通过userId获取此user所有location记录，包括时间，返回locationList,里面都是location对象，有id,userId,location,date四个属性,三个表中的时间都是dateTime格式，要精确到秒
    @abstractmethod
    def getAllLocationByUserId(self, userId):
        pass


    """
    温度相关操作
    ******
    *****
    """

    #  在temperature插入新的记录,返回bool,如果传入的参数为None，或者发生异常（如参数格式不对）返回False,以下date类型均为datetime
    @abstractmethod
    def addNewTemperature(self, dormitoryId, temperature, date):
        pass



    #  通过dormitoryId获取此dormitory所有temperature记录，包括时间，返回temperatureList,里面都是location对象，有id,dormitoryId,temperature,date四个属性
    @abstractmethod
    def getAllTemperatureByDormitoryId(self, dormitoryId):
        pass

    #  通过dormitoryId获取今日内的Temperature记录，返回list
    @abstractmethod
    def getAllTemperatureOfTodayByDormitoryId(self, dormitoryId):
        pass

    #  得到从今天开始的指定n天内的每天的一个温度（平均温度不好算），返回list
    #  如getATemperatureOf_n_Days(10,7)返回七天内的每天气温的平均温度的list,里面只包含平均温度，从前往后遍历是从最远的那天到今天为止
    #  为了便于编写，但其实也是符合真实的使用情况，此方法的正确建立在temperature表中dateTime是按照随id增大，dateTime越来越新的基础上，所以造假数据时要注意一下
    #  且要保证n天内的数据都要有，否则空的那天会没有数据，导致list长度变短，也无法判断哪天没数据
    @abstractmethod
    def getATemperatureOf_n_Days(self, dormitoryId, n):
        pass


    """
    湿度相关
    *****
    *****
    """

    #  在humidity插入新的记录,返回bool,如果传入的参数为None，或者发生异常（如参数格式不对）返回False,以下date类型均为datetime
    @abstractmethod
    def addNewHumidity(self, dormitoryId, humidity, date):
        pass

    #  通过dormitoryId获取此dormitory所有humidity记录，包括时间，返回temperatureList,里面都是location对象，有id,dormitoryId,humidity,date四个属性
    @abstractmethod
    def getAllHumidityByDormitoryId(self, dormitoryId):
        pass



    #  通过dormitoryId获取今日内的Humidity记录，返回list
    @abstractmethod
    def getAllHumidityOfTodayByDormitoryId(self, dormitoryId):
        pass


    #  得到从今天开始的指定n天内的每天的第一个湿度（平均湿度不好算），返回list
    #  如getAHumidityOf_n_Days(10,7)返回七天内的每天气温的平均温度的list,里面只包含平均温度，从前往后遍历是从最远的那天到今天为止
    #  为了便于编写，但其实也是符合真实的使用情况，此方法的正确建立在humidity表中dateTime是按照随id增大，dateTime越来越新的基础上，所以造假数据时要注意一下
    #  且要保证n天内的数据都要有，否则空的那天会没有数据，导致list长度变短，也无法判断哪天没数据
    @abstractmethod
    def getAHumidityOdf_n_Days(self, dormitoryId, n):
        pass
